package com.merry.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;


@Controller
public class HelloController {
    @RequestMapping(value = "/")
    public String index(){
        return "index";
    }

    @RequestMapping(value = "/target")
    public String target(){
        return "target";
    }

    /**
     * 测试get和post请求
     * 如果method属性不匹配则会出现：
     *      HTTP Status 405 – Method Not Allowed
     */
    @GetMapping("/get")
    public String get(){
        return "target";
    }

    @PostMapping("/post")
    public String post(){
        return "target";
    }

    /**
     * 发送put、delete请求有两种方式；
     *  1.使用postman方式，类似于前后端分离的情况。
     *  2.使用form表单发送。由于form表单只支持get和post请求，所以我们需要在表单中hidden一个_method值，这个值作为真正的请求put。
     *      想完成这个操作需要配置一个filter(在将filter配置到web.xml中)。HiddenHttpMethodFilter，这个类会将以post请求方式发送的form请求，变成_method属性中的请求方式。
     * @return
     */
    @PutMapping("/put")
    public String put(){
        return "target";
    }

    @DeleteMapping("/delete")
    public String delete(){
        return "target";
    }

    /**
     * @RequestMapping:
     *      params属性：params中所设置的条件必须同时满足。有下面四种表达式可以使用（了解）
     *          "param"：请求中必须含有param参数。
     *          "!param"：请求中不能含有param参数。
     *          "param=value"：请求中必须含有param参数，并且param参数的值必须为value。
     *          "param!=value"：请求中必须含有param参数，但是param参数的值不能为value。
     *      headers属性：与params的规则一模一样，有下面四种写法，专门验证请求头信息的（了解）
     *          "header"；
     *          "!header"：
     *          "header=value"：
     *          "header!=value"：
     */


    /**
     * ant风格：
     */
    @RequestMapping("/a?a/testAnt")
    public String testAnt(){
        return "target";
    }

    /**
     * restful风格的占位符.
     */
    @RequestMapping("/restful/{id}")
    public String restful(@PathVariable(value = "id") String id){
        System.out.println("id: " +id);
        return "target";
    }
}
